package person.aoao.library.dao;

import org.apache.ibatis.annotations.Param;
import org.springframework.data.domain.Pageable;
import person.aoao.library.entity.BorrowList;

import java.util.List;

/**
 * (BorrowList)表数据库访问层
 *
 * @author makejava
 * @since 2023-05-05 10:15:41
 */
public interface BorrowListDao {

    /**
     * 通过ID查询单条数据
     *
     * @param borrowid 主键
     * @return 实例对象
     */
    BorrowList queryById(Integer borrowid);

    /**
     * 查询指定行数据
     *
     * @param borrowList 查询条件
     * @param pageable   分页对象
     * @return 对象列表
     */
    List<BorrowList> queryAllByLimit(BorrowList borrowList, @Param("pageable") Pageable pageable);

    /**
     * 统计总行数
     *
     * @param borrowList 查询条件
     * @return 总行数
     */
    long count(BorrowList borrowList);

    /**
     * 新增数据
     *
     * @param borrowList 实例对象
     * @return 影响行数
     */
    int insert(BorrowList borrowList);

    /**
     * 批量新增数据（MyBatis原生foreach方法）
     *
     * @param entities List<BorrowList> 实例对象列表
     * @return 影响行数
     */
    int insertBatch(@Param("entities") List<BorrowList> entities);

    /**
     * 批量新增或按主键更新数据（MyBatis原生foreach方法）
     *
     * @param entities List<BorrowList> 实例对象列表
     * @return 影响行数
     * @throws org.springframework.jdbc.BadSqlGrammarException 入参是空List的时候会抛SQL语句错误的异常，请自行校验入参
     */
    int insertOrUpdateBatch(@Param("entities") List<BorrowList> entities);

    /**
     * 修改数据
     *
     * @param borrowList 实例对象
     * @return 影响行数
     */
    int update(BorrowList borrowList);

    /**
     * 通过主键删除数据
     *
     * @param borrowid 主键
     * @return 影响行数
     */
    int deleteById(Integer borrowid);

    List<BorrowList> getBorrowListByUid(@Param("uid") String uid,  @Param("num") Integer num,@Param("page") Integer page);

    long countByUid(@Param("uid") String uid);

    List<BorrowList> selectAll(@Param("num") Integer num, @Param("page") Integer page);

    long selectCount();

    List<BorrowList> searchBorrow(@Param("keyWord") String keyWord,@Param("state") Integer state,@Param("num") Integer num,@Param("page") Integer page);

    long searchCount(@Param("keyWord")String keyWord, @Param("state")Integer state);


    long getCountByBook(@Param("bookId") Integer bookId);

    long countByUidState(@Param("uid") String uid);

    BorrowList getStateByUser(@Param("uid") String uid, @Param("bookId") Integer bookid);

    List<BorrowList> getByBook(@Param("bookId") Integer bookId);
    List<BorrowList> getByBookInfo(@Param("bookId") Integer bookId);
    long getBorrCountByDate(@Param("date") String date);

    long getReturnCountByDate(@Param("date") String date);
}

